[Chapter 5] The sendmail.cf File
Author: Bryan Costales & Eric Allman
Date: 1999-01-06T18:33:39Z

#

| Chapter 5 |

# 5. The sendmail.cf File

Contents:
Overview
The Minimal File
A Quick Tour
Things to Try

The lines of text in a sendmail.cf file have been described by some as resembling modem noise and by others as resembling Mr. Dithers swearing in the comic strip Blondie.

>     R$+@$=W      sendmail.cf file
>     {$/{{.+      modem noise
>     !@#!@@!      Mr. Dithers swearing

Constructs like the following can certainly be intimidating to the newcomer:

>     R$+@$=W         $@$1@$H         user@thishost -> user@hub
>     R$=W!$+         $@$2@$H         thishost!user -> user@hub
>     R@$=W:$+        $@@$H:$2        @thishost:something
>     R$+%$=W         $@$>3$1@$2      user%thishost

But think back to your early days of C programming. Did you feel any more comfortable with an expression like this?

>     #define getc(p)  (-(p)->_cnt>=0? ((int)*(p)->_ptr++):_filbuf(p))

Like any new language, learning the language that is used in the sendmail.cf file requires time and practice. In the chapters that follow, we introduce that language, but first we present an overview of the sendmail.cf file.

## 5.1 Overview

The sendmail.cf file is read and parsed by sendmail every time sendmail starts. It contains information that is necessary for sendmail to run. It lists the locations of important files and specifies the default permissions for those files. It contains options that modify sendmail's behavior. Most important, it contains rules and rule sets for rewriting addresses.

The sendmail.cf configuration file is line-oriented. A configuration command, composed of a single letter, begins each line:

>     V7                    good
>      V7                   bad, does not begin a line
>     V7 Fw/etc/mxhosts     bad, two commands on one line
>     Fw/etc/mxhosts        good

Each configuration command is followed by parameters that are specific to it. For example, the `V` command is followed by a number, whereas the `F` command is followed by the letter `w`, then the full pathname of a file. The complete list of configuration commands [1] is shown in Table 5.1.

> [1] Note that other versions of sendmail, such as Sun or IDA, may have more, fewer, or different commands. We don't document those other versions in this book.

Table 5.1: The sendmail.cf File's Configuration Commands
Command | Description
--- | ---
V | Define configuration file version (beginning with V8.6)
M | Define a mail delivery agent
D | Define a macro
R | Define a rewriting rule
S | Declare a rule-set start
C | Define a class macro
F | Define a class macro from a file or a pipe
O | Define an option
H | Define a header
P | Define delivery priorities
T | Declare trusted users (ignored in V8.1, back in V8.7)
K | Declare a keyed database (beginning with V8.1)
E | Define an environment variable (beginning with V8.7)
L | Include extended load average support (contributed software, not covered)

Some commands, such as `V` should appear only once in your sendmail.cf file. Others, such as `R`, may appear often.

Blank lines and lines that begin with the `#` character are considered comments and are ignored. A line that begins with either a tab or a space character is a continuation of the preceding line:

>     # a comment
>     V7
>          /Berkeley  <- continuation of V line above

>      tab

Note that anything other than a command, a blank line, a space, a tab, or a `#` character causes an error. If the sendmail program finds such a character, it prints the following warning, ignores that line, and continues to read the configuration file:

>     sendmail.cf: line 15: unknown control line "v6"

Here, sendmail found a line in its sendmail.cf file that began with the letter `v`. Since a lowercase `v` is not a legal command, sendmail printed a warning. The line number in the warning is that of the line in the sendmail.cf file that began with the illegal character.

An example of each kind of command is illustrated in the following sections. They are actual commands that you will see described throughout this tutorial. Don't be concerned if you don't understand the details at this time. All that is now mysterious will eventually become clear.

4.4 Things to Try |  | 5.2 The Minimal File